package utilities;

/**
 * Alcune funzioni di utilità per generare i form.
 * @author Ale
 */
public class FormUtilities {
 
    /**
     * Metodo per creare le righe del form. Ciascuna riga è composta da:
     * etichetta, input e suggerimento.
     * @param uniqueName nome univoco in tutta la pagina della riga del form
     * @param label etichetta associata alla riga
     * @param value eventuale valore con cui precompilare il campo
     * @param inputType tipo di input (text, password...)
     * @param checkFunction eventuale funzione Javascript da richiamare per validare il campo
     * @param hint suggerimento da mostrare all'utente
     * @return una stringa Html che rappresenta la riga del form
     */
    public static String creaRiga(String uniqueName, String label, String value, String inputType, String checkFunction, String hint){
        String hintId = uniqueName+"Hint";
        String errorId = uniqueName+"Error";

        String res = "";

        res += "<div class='liquidTr'>\n";
        res += "    <div class='liquidTrCont'>\n";
        res += "        <span class='labelSpan'><label>"+label+":</label></span>\n";
        res += "        <span class='inputSpan'>\n";
        res += "            <input id='"+uniqueName+"' name='"+uniqueName+"' value='"+value+"' type='"+inputType+"' onfocus='showLiquidHint(document.getElementById(\""+hintId+"\"));'";
        if (!"".equals(checkFunction)) res +=  "onblur='"+checkFunction+"(this.value, false, document.getElementById(\""+errorId+"\"));'";
        res += "/>\n";
        res += "        </span>\n";
        res += "        <span class='hintSpan lightInvertedGradient '>\n";
        res += "            <p id='"+hintId+"' class='unselected'>"+hint+"</p>\n";
        res += "        </span>\n";
        res += "    </div>\n";
        res += "    <div class ='trError' id='"+errorId+"'></div>\n";
        res += "</div>\n";

        return res;
    }
    
    /**
     * Metodo per creare le righe del form. Ciascuna riga è composta da:
     * etichetta, input e suggerimento.
     * @param uniqueName nome univoco in tutta la pagina della riga del form
     * @param label etichetta associata alla riga
     * @param inputType tipo di input (text, password...)
     * @param checkFunction eventuale funzione Javascript da richiamare per validare il campo
     * @param hint suggerimento da mostrare all'utente
     * @return una stringa Html che rappresenta la riga del form
     */
    public static String creaRiga(String uniqueName, String label, String inputType, String checkFunction, String hint){
        return creaRiga(uniqueName, label, "", inputType, checkFunction, hint);
    }
    
    /**
     * Metodo per creare le righe del form. Ciascuna riga è composta da:
     * etichetta e input.
     * @param uniqueName nome univoco in tutta la pagina della riga del form
     * @param label etichetta associata alla riga
     * @param value eventuale valore con cui precompilare il campo
     * @param inputType tipo di input (text, password...)
     * @param checkFunction eventuale funzione Javascript da richiamare per validare il campo
     * @return una stringa Html che rappresenta la riga del form
     */
    public static String creaRigaLight(String uniqueName, String label, String value, String inputType, String checkFunction){
        String errorId = uniqueName+"Error";

        String res = "";

        res += "<p>\n";
        res += "    <label>"+label+":</label><br/>\n";
        res += "    <input id='"+uniqueName+"' name='"+uniqueName+"' value='"+value+"' type='"+inputType+"'";
        if (!"".equals(checkFunction))
                        res +=  "onblur='"+checkFunction+"(this.value, false, document.getElementById(\""+errorId+"\"));'";
        res += "    />\n";
        res += "    <div class ='trError' id='"+errorId+"'></div>\n";

        return res;
    }
    
    /**
     * Metodo per rappresentare il feedback di un utente usando da 0 a 5 stelline.
     * Il codice restituito da questa stringa sarà poi ulteriormente interpretato e
     * modificato dal plugin Star Rating di JQuery.
     * @param seq numero univoco nella pagina che identifica questo gruppo di stelline
     * @param feed valore totale del feedback dell'utente
     * @param numFeed numero di voti ricevuti
     * @return codice Html interpretabile da JQuery
     */
    public static String drawStars(int seq, float feed, int numFeed){
        String res = "";
        
        float f = Math.round(feed/numFeed);
        res += "<span class='starContainer'>";
        for(int i=1; i<=5; i++){
            String chk;
            if (f>i-1 && f<=i) chk = "checked='checked'";
            else chk = "";
   
            res += "<input name='star"+seq+"' type='radio' class='star' value='"+i+"' disabled='disabled' "+ chk+" />";
        }
        res += "</span>";
        
        return res;
    }
    
    /**
     * Metodo per rappresentare il feedback di un utente usando da 0 a 5 stelline.
     * Il codice restituito è lo stesso che si avrebbe se JQuery lo avesse già
     * interpretato.
     * @param seq numero univoco nella pagina che identifica questo gruppo di stelline
     * @param feed valore totale del feedback dell'utente
     * @param numFeed numero di voti ricevuti
     * @return codice Html per mostrare il feedback
     */
    public static String drawStaticStars(int seq, float feed, int numFeed){
        String res = "";
        
        float f = Math.round(feed/numFeed);
        res += "<span class='starContainer'>";
        res += "<span class='star-rating-control'><div class='rating-cancel' style='display: none; '><a title='Cancel Rating'></a></div>";
        for(int i=1; i<=5; i++){ 

            if (i<=f){
                res+="<div class='star-rating rater-0 star star-rating-applied star-rating-readonly star-rating-on'><a title='"+i+"'>"+i+"</a></div>";
            }
            else{
                res+="<div class='star-rating rater-0 star star-rating-applied star-rating-readonly'><a title='"+i+"'>"+i+"</a></div>";
            }

        }
        
        res += "</span>";
        
        return res;
    }
}
